package com.xci.platform.auth.dao;

import com.xci.platform.auth.core.LoginStatusModel;
import com.xci.platform.auth.entity.UserEntity;
import com.xci.platform.core.Simple;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 系统用户数据访问接口
 */
@Mapper
public interface UserDao {

    /**
     * 新增用户
     *
     * @param entity 用户对象
     * @return 返回影响的行数
     */
    Integer insert(@Param("entity") UserEntity entity);

    /**
     * 更新用户
     *
     * @param entity 用户对象
     * @return 返回影响的行数
     */
    Integer update(@Param("entity") UserEntity entity);

    /**
     * 删除用户
     *
     * @param id 用户主键
     * @return 返回影响的行数
     */
    Integer delete(@Param("id") String id);

    /**
     * 更新用户登录状态
     *
     * @param loginStatusModel 用户主键
     */
    Integer updateLoginStatus(@Param("model") LoginStatusModel loginStatusModel);

    /**
     * 更新用户启用状态
     *
     * @param id     用户主键
     * @param status 是否启用(1:启用 0:禁用)
     */
    Integer updateStatus(@Param("id") String id, @Param("status") Integer status);

    /**
     * 根据部门主键更新部门名称
     *
     * @param departmentId   部门主键
     * @param departmentName 部门名称
     */
    Integer updateDeptNameByDeptId(@Param("departmentId") String departmentId,
                                   @Param("departmentName") String departmentName);

    /**
     * 验证指定用户是否存在
     *
     * @param id 用户主键
     * @return 如果存在返回1, 否则返回0
     */
    Integer existById(@Param("id") String id);

    /**
     * 验证指定用户账号是否存在
     *
     * @param account 账号
     * @param id      用户主键
     * @return 如果存在返回1, 否则返回0
     */
    Integer existByAccount(@Param("account") String account, @Param("id") String id);

    /**
     * 验证是否存在指定部门主键的角色
     *
     * @param departmentId 所属部门
     * @return 如果存在返回true, 否则返回false
     */
    Integer existByDeptId(@Param("departmentId") String departmentId);

    /**
     * 修改用户密码
     *
     * @param id        用户主键
     * @param secretKey 密钥
     * @param password  新密码
     */
    Integer modifyPassword(@Param("id") String id, @Param("secretKey") String secretKey, @Param("password") String password);

    /**
     * 根据用户主键获取用户对象
     *
     * @param id 用户主键
     * @return 返回指定用户主键的用户对象
     */
    UserEntity queryById(@Param("id") String id);

    /**
     * 根据用户账号获取用户对象
     *
     * @param account 用户账号
     * @return 用户对象
     */
    UserEntity queryByAccount(@Param("account") String account);

    /**
     * 根据用户主键获取用户账号
     *
     * @param id 用户主键
     * @return 返回用户账号
     */
    String queryAccountById(@Param("id") String id);

    /**
     * 根据用户主键获取用户姓名
     *
     * @param id 用户主键
     * @return 返回用户姓名
     */
    String queryNameById(@Param("id") String id);

    /**
     * 根据用户主键获取用户部门主键
     *
     * @param id 用户主键
     * @return 用户部门主键
     */
    String queryDepartmentIdById(@Param("id") String id);

    /**
     * 获取用户简单对象列表
     *
     * @param params 查询参数
     */
    List<Simple> querySimple(Map params);

    /**
     * 查询用户列表
     *
     * @param params 查询参数
     * @return 返回符合查询条件的用户列表
     */
    List<UserEntity> query(Map params);
}
